#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <assert.h>

void PrintArray(int* a, int n);
void InsertSort(int* a, int n);
void SherSort(int* a, int n);
void SelectSort(int* a, int n);
void HeapSort(int* a, int n);
void BubbleSort(int* a, int n);
void QuickSort(int* a, int l, int r);
void QuickSort1(int* a, int l, int r);
void QuickSort2(int* a, int l, int r);
void QuickSort3(int* a, int l, int r);
int QuickSort11(int* a, int l, int r);
int QuickSort22(int* a, int l, int r);
int QuickSort33(int* a, int l, int r);
void QuickSortNonR(int* a, int l, int r);
void MergeSort(int* a, int n);
void MergeSortY(int* a, int l, int r, int* tmp);
void MergeSortNonR(int* a, int n);
void MergeSortNonRY(int* a, int l, int r, int* tmp);
void CountSort(int* a, int n);

typedef int STDataType;
typedef struct Stack
{
	STDataType* a;
	int top;
	int capacity;
}Stack;
void StackInit(Stack* ps);
void STPush(Stack* ps, STDataType x);
void STPop(Stack* ps);
bool STEmpty(Stack* ps);
STDataType STTop(Stack* ps);
void STDestroy(Stack* ps);
